import subprocess
import os
import shutil
from config import ALLURE_RESULTS_DIR, ALLURE_REPORT_DIR


class AllureReportGenerator:
    @staticmethod
    def generate_report(clean_results=True):
        """
        生成Allure HTML报告到report目录，并可自动清理临时结果数据

        参数:
            clean_results: 是否在生成报告后清理结果数据目录，默认为True
        """
        # 确保结果目录和报告目录存在
        os.makedirs(ALLURE_RESULTS_DIR, exist_ok=True)
        os.makedirs(ALLURE_REPORT_DIR, exist_ok=True)

        try:
            # 调用allure命令生成报告（--clean确保覆盖旧报告）
            cmd = [
                "D:/testtool/allure-2.34.1/bin/allure.bat", "generate",
                ALLURE_RESULTS_DIR,
                "-o", ALLURE_REPORT_DIR,
                "--clean"
            ]
            # 执行命令并捕获输出
            result = subprocess.run(
                cmd,
                check=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True
            )

            # 生成报告后清理结果数据目录
            if clean_results:
                if os.path.exists(ALLURE_RESULTS_DIR):
                    shutil.rmtree(ALLURE_RESULTS_DIR)
                    print(f"已清理临时结果目录: {ALLURE_RESULTS_DIR}")

            print("报告生成成功！路径：", ALLURE_REPORT_DIR)
            return True

        except subprocess.CalledProcessError as e:
            print(f"报告生成失败：{e.stderr}")
            return False
        except FileNotFoundError:
            print("未找到allure命令，请确保Allure已安装并添加到环境变量")
            return False